<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!--  
    可被3整除的最大和
给你一个整数数组 `nums`，请你找出并返回能被三整除的元素最大和。
示例 1：
输入：nums = [3,6,5,1,8]
输出：18
解释：选出数字 3, 6, 1 和 8，它们的和是 18（可被 3 整除的最大和）。
示例 2：
输入：nums = [4]
输出：0
解释：4 不能被 3 整除，所以无法选出数字，返回 0。
 -->
</head>
<body>
  <script>
   /**
 * 时间复杂度O(n)
 * 空间复杂度O(n)
 */
var maxSumDivThree1 = function(nums) {
    let state = [0, Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER];

    for (let num of nums) {
        if (num % 3 === 0) {
            state = [state[0] + num, state[1] + num, state[2] + num ]
        } else if (num % 3 === 1) {
            const a = Math.max(state[2] + num, state[0]);
            const b = Math.max(state[0] + num, state[1]);
            const c = Math.max(state[1] + num, state[2]);
            state = [a, b, c];
        } else if (num % 3 === 2) {
            const a = Math.max(state[1] + num, state[0]);
            const b = Math.max(state[2] + num, state[1]);
            const c = Math.max(state[0] + num, state[2]);
            state = [a, b, c];
        }
    }
    return state[0];
};
console.log(maxSumDivThree1([3,6,5,1,8]));
  </script>
</body>
</html>